import axios from 'axios';

import { message } from 'antd';

import { store } from '@/store/store';
import { logout } from '@/store/actions/login';
import { customHistory } from './history';

// 导出网络请求库实例
export const http = axios.create({
  baseURL: 'http://geek.itheima.net/v1_0',
  timeout: 5000,
});

// 设置请求拦截器
http.interceptors.request.use((config) => {
  // console.log('config', config);
  // 从store拿token
  const token = store.getState().login;

  // 除了登录之外的请求，都要加token
  if (!config.url.startsWith('/authorizations')) {
    config.headers.Authorization = `Bearer ${token}`;
  }

  return config;
});

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    console.dir(error);

    // 通过分析error对象，这个网络超时错误
    if (!error.response) {
      message.error('网络超时，请稍后再试');
      // 交还给axios
      return Promise.reject(error);
    }

    // 和api确定token实效的status
    // if (error.response.status === 401) {
    //   message.warn('token 认证失败，请刷新浏览器后，重新登录');
    //   store.dispatch(logout());
    //   // 交还给axios
    //   return Promise.reject(error);
    // }

    // 处理token认证失败 401 错误
    if (error.response.status === 401) {
      message.error('token 认证失败', 0.5, () => {
        // 删除旧的token, 使用登出的 action
        store.dispatch(logout());
        // 如果用户再次刷新则会自动回到登录页面
        // 不用用户刷新，自动跳转
        customHistory.push('/login', {
          from: customHistory.location.pathname,
        });
      });

      // 处理完毕后返回给 axios 做后续处理
      return Promise.reject(error);
    }

    // 处理token认证失败 401 错误
    // if (error.response.status === 401) {
    //   console.dir('token实效', error);
    //   message.warn('token 认证失败，请刷新浏览器后，重新登录');
    //   // 清除token
    //   store.dispatch(logout());
    //   // 跳转到登录页面
    //   customHistory.push('/login', {
    //     from: customHistory.location.pathname,
    //   });

    //   return Promise.reject(error);
    // }
  }
);
